/*************************************************************************
	> File Name: struct.h
	> Author:李远远 
	> Mail: 
	> Created Time: 2018年08月27日 星期一 08时47分27秒
 ************************************************************************/

#ifndef _STRUCT_H
#define _STRUCT_H

#define ADMIN_INFO_SIZE 21	//账号密码长度
#define TIME_DATE_SIZE 20	//日期时间信息长度
#define BUF_SIZE 100		//信息传输结构体

#define N_LY 3//求读取N次求平均值
#define COUNT 360

#define SOCKET_FIFO "/tmp/socket_fifo"	//socket线程接收消息管道
#define SQLITE_FIFO "/tmp/sqlite_fifo"	//数据库操作线程接收消息管道
#define TOWARD_M0_FIFO "/tmp/toward_m0_fifo"	//向M0板发送消息线程接收消息管道
#define COLLECT_DATA_FIFO "/tmp/collect_data_fifo"	//采集消息线程接收消息管道

#define IP "192.168.0.253"
#define PORT 58888
#define FLAG_SIZE 100

#define ADMI "#ADMI#"		//登录信息
#define DEVI "#DEVI#"		//设备控制信息
#define PZXG "#PZXG#"		//修改配置信息
#define CXLS "#CXLS#"		//查询历史信息
#define DLCG "#DLCG#"		//如果登录成功,把客户端登录状态信息发送给采集消息线程
#define ZTXX "#ZTXX#"		//客户端与服务器通信的结构体
#define ADMR "#ADMR#"		//登录信息返回结果
#define ZGBM "#ZGBM#"		//服务器与M0板通信的结构体

#define ADMI "#ADMI#"		//登录信息
#define DLOK "#DLOK#"		//登录OK
#define DLCW "#DLCW#"		//登录错误

#define LSSJ "#LSSJ#"		//历史数据
#define CXJS "#CXJS#"		//查询结束
#define CXSB "#CXSB#"		//查询查询失败

#define ZCZH "#ZCZH#"		//账号注册
#define ZCOK "#ZCOK#"		//账号注册OK
#define ZCSB "#ZCSB#"		//账号注册失败

#define TJKH "#TJKH#"       //添加卡号

//登录信息结构体        标识：#ADMI#
typedef struct admin{
    char id[ADMIN_INFO_SIZE];           //帐号
    char password[ADMIN_INFO_SIZE];     //密码
}admin;

//登录状态结构体		标识：#ADMS#
typedef struct adm_state{
	char id[ADMIN_INFO_SIZE];	//帐号
	char state;					//登录状态		
	int sockID;					//登录客户端连接服务器socketID
}adm_state;

//环境数据结构体        标识：#ENVI#
typedef struct env_data1{
    float tem;      //温度
    float hum;     	//湿度
    float lux;     	//光照度
}env_data1;

//环境状态				标识：#ENVS#
typedef struct env_state1{
	char tem_state;	//温度是否正常
	char hum_state;	//湿度是否正常
	char lux_state;	//光照度是否正常
}env_state1;

//设备状态结构体        标识：#DEVI#
typedef struct  dev1{
    char air_fan;        //风扇0表示关,1表示开,控制温度,开(1),关(0)
    char sunshade;      //遮阳网0表示关,1表示开,控制光照,开(1),关(0)
    char spray_water;    //喷水0表示关,1表示开,控制湿度,开(1),关(0)
}dev1;

//时间信息结构体        标识：#TIME#
typedef struct time{
    char nowDate[TIME_DATE_SIZE];   //日期,年-月-日
    char nowTime[TIME_DATE_SIZE];   //时间,时:分:秒
}_time;

//客户端与服务器通信的结构体    标识：#ZTXX#
typedef struct server_to_client{
    env_data1 env_data;    	//环境数据
    env_state1 env_state;   	//环境状态
    dev1 dev;				//设备
    _time nowtime;        	//时间信息
}server_to_client;

//配置信息结构体			标识：#PZXG#
typedef struct config_data{
    env_data1 max_env;	//环境数据上限
    env_data1 min_env;	//环境数据下限
}config;

//管道通信结构体
typedef struct fifo{
	int sockID;				//消息来源或目的地socketID
	char buf[BUF_SIZE];		//发送的数据
}fifo;

/*
//向客户端发送信息队列
typedef struct queue
{
	fifo *p;
	struct queue *next;
}queue;

typedef struct queue_T
{
	struct queue *head;
	struct queue *pend;
	int count;
}queue_T;
*/

//返回值
enum E_RESULT{
    ERR = 1,	//错误
    OK,			//正常
	ALTER,		//保留
};

//环境状态枚举
enum JUDGE{
    LOW = 1,	//低
	NORMAL,		//正常
	HEIGHT,		//高
};

#endif
